/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.python.pydev.refactoring.tdd;
import java.util.List;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.python.pydev.core.TestDependent;
import org.python.pydev.core.docutils.PySelection;
import org.python.pydev.core.log.Log;
import org.python.pydev.core.structure.CompletionRecursionException;
import org.python.pydev.editor.codecompletion.PyCodeCompletion;
import org.python.pydev.editor.codecompletion.revisited.CodeCompletionTestsBase;
import org.python.pydev.editor.codecompletion.revisited.modules.CompiledModule;
import org.python.pydev.editor.refactoring.AbstractPyRefactoring;
import com.aptana.shared_core.callbacks.ICallback;
import com.python.pydev.refactoring.refactorer.Refactorer;
/**
* @author Fabio
*
*/
public class TddCodeGenerationQuickFixParticipantTest extends CodeCompletionTestsBase {
public static void main(String[] args) {
try {
//DEBUG_TESTS_BASE = true;
TddCodeGenerationQuickFixParticipantTest test = new TddCodeGenerationQuickFixParticipantTest();
test.setUp();
test.testDontCreate();
test.tearDown();
System.out.println("Finished");
junit.textui.TestRunner.run(TddCodeGenerationQuickFixParticipantTest.class);
} catch (Throwable e) {
e.printStackTrace();
}
}
/*
* @see TestCase#setUp()
*/
public void setUp() throws Exception {
super.setUp();
AbstractPyRefactoring.setPyRefactoring(new Refactorer());
CompiledModule.COMPILED_MODULES_ENABLED = false;
this.restorePythonPath(TestDependent.GetCompletePythonLib(true) +
"|" + TestDependent.PYTHON_PIL_PACKAGES +
"|"
+ TestDependent.TEST_PYSRC_LOC +
"configobj-4.6.0-py2.6.egg", false);
this.restorePythonPath(false);
codeCompletion = new PyCodeCompletion();
TddCodeGenerationQuickFixParticipant.onGetTddPropsError = new ICallback<Boolean, Exception>() {
public Boolean call(Exception e) {
throw new RuntimeException("Error:" + Log.getExceptionStr(e));
}
};
PyCodeCompletion.onCompletionRecursionException = new ICallback<Object, CompletionRecursionException>() {
public Object call(CompletionRecursionException e) {
throw new RuntimeException("Recursion error:" + Log.getExceptionStr(e));
}
};
}
/*
* @see TestCase#tearDown()
*/
public void tearDown() throws Exception {
CompiledModule.COMPILED_MODULES_ENABLED = true;
super.tearDown();
AbstractPyRefactoring.setPyRefactoring(null);
PyCodeCompletion.onCompletionRecursionException = null;
}
public void testCreate() throws Exception {
String s = "" +
"class MyClass(object):\n" +
" pass\n" +
"\n" +
"def makeTestObj():\n"
+
" return MyClass()\n" +
"\n" +
"def makeTestObj2():\n" +
" return makeTestObj()\n" +
"\n"
+
"def testName():\n" +
" obj = makeTestObj2()\n" +
" obj.unimplementedFunction()\n" +
"";
TddCodeGenerationQuickFixParticipant participant = new TddCodeGenerationQuickFixParticipant();
Document doc = new Document(s);
List<ICompletionProposal> props = participant.getTddProps(new PySelection(doc, s.length() - 1), null, null,
nature, null, s.length() - 1, null);
assertContains("Create unimplementedFunction method at MyClass (__module_not_in_the_pythonpath__)",
props.toArray(new ICompletionProposal[0]));
}
public void testDontCreate() throws Exception {
String s = "" +
"class MyClass(object):\n" +
"\n" +
" def unimplementedFunction(self):\n" +
" pass\n"
+
"\n" +
"def makeTestObj():\n" +
" return MyClass()\n" +
"\n" +
"def makeTestObj2():\n"
+
" return makeTestObj()\n" +
"\n" +
"def testName():\n" +
" obj = makeTestObj2()\n"
+
" obj.unimplementedFunction()\n" +
"";
TddCodeGenerationQuickFixParticipant participant = new TddCodeGenerationQuickFixParticipant();
Document doc = new Document(s);
List<ICompletionProposal> props = participant.getTddProps(new PySelection(doc, s.length() - 1), null, null,
nature, null, s.length() - 1, null);
assertNotContains("Create unimplementedFunction method at MyClass (__module_not_in_the_pythonpath__)",
props.toArray(new ICompletionProposal[0]));
}
}